<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <script>

        // function Person(){
        //     this.name = '小李'
        //     this.age = 18
        // }
        // const p1 = new Person()
        // const p2 = new Person()
        // console.log(p1 === p2)

        // 单例模式就是为了解决 同一个构造函数创建出来的对象 是不同的地址的问题  
        // 单例模式 就是一个构造函数一生只有一个实例对象

        // const obj = {}

        // function Person(){
        //     obj.name = '小李'
        //     obj.age = 18
        //     return obj
        // }
        // const p1 = Person()
        // const p2 = Person()
        // console.log(p1 === p2)


        // 单例模式的核心代码
        // let instance 
        // function singleton(){
        //     class Suibian{
        //         constructor(){
        //             this.name = 'suibian'
        //         }
        //     }
        //     if(!instance){
        //         // 进入这个 if 条件代表 instance 没有值 那我就给他重新 赋值
        //         instance = new Suibian()
        //     }

        //     return instance
        // }

        // const s1 = singleton()
        // const s2 = singleton()
        // const s3 = singleton()
        // console.log(s1 === s2)
        // console.log(s1 === s3)


        const singleton = (function () {
            let instance
            return function () {
                class Suibian {
                    constructor() {
                        this.name = 'suibian'
                    }
                }
                if (!instance) {
                    // 进入这个 if 条件代表 instance 没有值 那我就给他重新 赋值
                    instance = new Suibian()
                }

                return instance
            }
        })()
        // console.log(singleton)
        const s1 = singleton()
        const s2 = singleton()
        const s3 = singleton()
        console.log(s1 === s2)
        console.log(s1 === s3)
    </script>
</body>

</html>